package util.AST.Comando;

import java.util.ArrayList;

import util.AST.AST;
import util.AST.Comando.ComandoVariavel;
import util.AST.Comando.Simples.ComandoSimples;

public class Funcao extends AST {
	private ArrayList<ComandoVariavel> variaveis;
	private ArrayList<ComandoSimples> comandos;
	private int bytes;
	
	public Funcao(ArrayList<ComandoVariavel> variaveis, ArrayList<ComandoSimples> comandos) {
		this.variaveis = variaveis;
		this.comandos = comandos;
		this.bytes = 0;
		
		for(ComandoVariavel vd : variaveis)
		{
			if(vd.getTipo().getSpelling().equals("double")){
				this.bytes += 8;
			}else{
				this.bytes += 4;
			}
		}
	}

	@Override
	public String toString(int level) {
		int nextLevel = level+5;
		StringBuffer str = new StringBuffer();
		if ( this.variaveis != null ) {
			for (ComandoVariavel var : this.variaveis) {
				str.append(super.getSpaces(nextLevel) + "|-");
				str.append(var.toString(nextLevel));
			}
		}
		if ( this.comandos != null ) {
			for (ComandoSimples statement : this.comandos) {
				str.append(super.getSpaces(nextLevel) + "|-");
				str.append(statement.toString(nextLevel));
			}
		}
		return str.toString();
	}

	//get e set
	public ArrayList<ComandoVariavel> getVariaveis() {
		return variaveis;
	}

	public void setVariaveis(ArrayList<ComandoVariavel> variaveis) {
		this.variaveis = variaveis;
	}

	public ArrayList<ComandoSimples> getComandos() {
		return comandos;
	}

	public void setComandos(ArrayList<ComandoSimples> comandos) {
		this.comandos = comandos;
	}

	public int getBytes() {
		return bytes;
	}

	public void setBytes(int bytes) {
		this.bytes = bytes;
	}
	
	

}
